# include<stdio.h>
# include<mysql/mysql.h>
# include<time.h>
# include"cgi_base.h"
int main()
{
  //1、获取到query_string
  char query_string[1024*4]={0};
  int ret=GetQueryString(query_string);
  if(ret<0){
    fprintf(stderr,"GetQueryString failed\n");
    return 1;
  }
  //query_string形如%e5%8c%97%e4%ba%ac
  char city[1024*4]={0};
  sscanf(query_string,"city=%s",city);
  //2、从数据库中获取时差（完整的数据库访问操作）
 
//a、连接到数据库，定义mysql结构体指针，相当于一个句柄
   MYSQL *connect_fd=mysql_init(NULL);//有了一个空遥控器
   MYSQL * connect_ret=mysql_real_connect(connect_fd,"127.0.0.1",
       "root","123456","TestDb",3306,NULL,0);//连接数据库（拿遥控器和数据库进行配对）
   //127.0.0.1环回IP，可填对应机器的IP地址和端口号;第三个参数为用户名
   //第四个参数为密码；第五个参数为需要访问的数据库名字；第六个参数端口号，
   //端口号默认为3306，可以自己进行配置
   if(connect_ret==NULL){
     fprintf(stderr,"mysql connect failed\n");
     //连接失败：数据库IP地址或者用户名，数据库名不对……
     return 1;
   }
   fprintf(stderr,"mysql connect ok!\n");
   //b、拼装sql语句,组织命令
   char sql[1024*4]={0};
   sprintf(sql,"select timediff from worldtime where city='%s'",city);//拼装的sql语句不需要加分号
   //对于线上的数据库尽量不要使用select*进行查询，会消耗大量的时间
   //c、把sql语句发送到服务器上
   //使用遥控器把命令发送给服务器
   ret=mysql_query(connect_fd,sql);
   if(ret<0){
     fprintf(stderr,"mysql_query failed!%s\n",sql);
     mysql_close(connect_fd);//查询结果出错，需要关闭
     return 1;
 }
   //d、读取并且遍历服务器的返回结果
   MYSQL_RES* result=mysql_store_result(connect_fd);
   if(result==NULL)
   {
     fprintf(stderr,"mysql_store_result failed!\n");
     mysql_close(connect_fd);//查询结果出错，需要关闭
     return 1;
   }
   //获取到每一个元素的具体值
//期望值只有一列,失败获取到的值是一个非法的结果
   MYSQL_ROW row=mysql_fetch_row(result);
   if(row==NULL){
  //     fprintf(stderr,"mysql查询失败：city不存在");
        printf("<html>");                                                                                                     
          printf("city不存在\n");//这个数只打印两位，不够两位用2补齐                                        
            printf("</html>");  
       mysql_close(connect_fd);
       return 1;
   }
   double time_diff=atof(row[0]);
   mysql_close(connect_fd);
  //3、获取系统时间，根据时差进行计算，得到对方城市的时间
//当前的时间戳
  time_t t=time(NULL);//获取当前系统时间
//把秒数换成小时数
   t+=time_diff*3600;
//把时间戳转换成格式化的时间
  struct tm* tp=localtime(&t);
  //4、响应结果
  printf("<html>");
  printf("%02d:%02d",tp->tm_hour,tp->tm_min);//这个数只打印两位，不够两位用2补齐
  printf("</html>");
   return 0;
}
